using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace NewsSpider.DBSqlHelp
{

    /// <summary>
    /// 版权所有: 版权所有(C) 2012，上海云里网络科技有限公司
    /// 内容摘要: DBAccessHelper
    /// 完成日期：2012年12月2日
    /// 版    本：V1.0 
    /// 作    者：Adin
    /// </summary>
    public class DBMSSQLHelper
    {
        private static SqlConnection cn;

        /// <summary>
        /// server为服务器IP地址，如果默认端口4433修改了，就应该填写为：127.0.0.1,8888（8888为您修改后的端口密码）,uid为用户名,pwd为密码,database为数据库名称
        /// </summary>
        public static string strConn = NewsSpider.DBSqlHelp.ConnectionData.GetConnectionMSSQLString();
        //public static string strConn = "server=127.0.0.1;uid=test;pwd=123456;database=TestDB;pooling=true";

        /// <summary>
        /// 连接投资卫士本地数据库
        /// </summary>
        /// <returns>返回本地数据库连接字符串</returns>
        public static string ConnectionMSSQL()
        {
            return strConn;
        }

        /// <summary>
        /// 连接数据库
        /// </summary>
        /// <returns>返回SqlConnection实例</returns>
        public static SqlConnection GetCon()
        {
            if (cn == null)
            {
                cn = new SqlConnection(strConn);
            }
            return cn;
        }

        /// <summary>
        /// 执行数据库操作语句
        /// </summary>
        /// <param name="strSql">SQL语句</param>
        /// <returns>返回影响行数</returns>
        public static int ExecuteSql(string strSql)
        {
            int iNum = -1;
            SqlConnection cn = DBMSSQLHelper.GetCon();
            SqlCommand cm = new SqlCommand(strSql, cn);
            try
            {
                cn.Open();
                iNum = cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                NewsSpider.Utility.Log.SaveErrorLog("执行数据库操作语句 -> " + ex.Message + "\r\n" + strSql + "\r\n");
            }
            finally
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
            }
            return iNum;
        }

        /// <summary>
        /// 函数输入SQL语句，输出一个结果集（DATATABLE）
        /// </summary>
        /// <param name="strSql">SQL语句</param>
        /// <returns>返回 DataTable</returns>
        public static DataTable GetTable(string strSql)
        {
            DataTable dt = new DataTable();
            SqlConnection cn = DBMSSQLHelper.GetCon();
            try
            {
                cn.Open();
                SqlCommand cm = new SqlCommand(strSql, cn);
                SqlDataAdapter da = new SqlDataAdapter(cm);
                da.Fill(dt);
            }
            catch (Exception ex)
            {
                NewsSpider.Utility.Log.SaveErrorLog("函数输入SQL语句，输出一个结果集（DATATABLE） -> " + ex.Message);
            }
            finally
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
            }
            return dt;
        }

        /// <summary>
        /// 函数输入SQL语句，返回一个SqlDataReader结果集
        /// </summary>
        /// <param name="strSql">SQL语句</param>
        /// <returns>返回 SqlDataReader 实例</returns>
        public static SqlDataReader ExReader(string strSql)
        {
            SqlConnection cn = DBMSSQLHelper.GetCon();
            SqlDataReader dr = null;
            try
            {
                cn.Open();
                SqlCommand cm = new SqlCommand(strSql, cn);
                dr = cm.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
                NewsSpider.Utility.Log.SaveErrorLog("函数输入SQL语句，返回一个SqlDataReader结果集 -> " + ex.Message);
            }

            return dr;
        }
    }
}
